//路由鉴权：项目当中路由能否被访问的权限设置（某个路由什么条件下可以访问）
import router from "./router/routerConfig.ts";
import globalSetting from "./setting/globalSetting.ts";
//@ts-ignore
import nprogress from "nprogress";//进度条插件
import "nprogress/nprogress.css"//进度条样式
nprogress.configure({showSpinner: false});//进度条加载的圈圈
import pinia from './piniaStore/rootStore.ts'//引入大仓库
//获取用户相关小仓库内部token数据，用于路由鉴权
import userStore from "./piniaStore/moudules/userStore.ts";
import {ElNotification} from "element-plus";

//拿到用户小仓库
let useUserStore = userStore(pinia); //此时直接拿小仓库是拿不到的，此时组件还没有挂载，pinia还没有安装,因此要先安装大仓库

//全局守卫：项目中任意路由切换都会触发的钩子
//全局前置守卫
//@ts-ignore
router.beforeEach(async (to: any, from: any, next: any) => {
    document.title = `${globalSetting.title}` + "-" + `${to.meta.title}`;
    //to:你将要访问的路由
    //from:从哪个路由而来
    //next:路由的放行函数
    nprogress.start();//进度条开始
    //获取token，判断用户登录还是未登录
    let token = useUserStore.token;
    let userName = useUserStore.username;//获取用户名称

    if (token) {
        //用户登录
        if (to.path == '/login') {
            //登录成功不允许访问login 重定向到home
            next({path: '/home'})
        } else {
            //访问其他路由
            if (userName) {
                //有用户信息，放行
                next();
            } else {
                //没有用户信息，获取用户信息
                try {
                    //获取用户信息后再放行
                    await useUserStore.userInfo();
                    //放行
                    next({...to});
                } catch (error) {
                    //获取用户信息失败，让用户重新登录
                    //token过期
                    ElNotification({
                        type: "error",
                        title: "系统消息",
                        message: "获取用户信息失败!"
                    })
                    await useUserStore.userLogOut();//退出登录
                    next({path: '/login'});//让用户重新登录
                }
            }
        }
    } else {
        next();
        // //用户未登录
        // if (to.path == '/login') {
        //     //如果访问login可以放行
        //     next();//放行
        // } else {
        //     //访问其他，重定向到login
        //     next({path: '/login'});
        // }
    }
})


//全局后置守卫
//@ts-ignore
router.afterEach((to: any, from: any) => {
    nprogress.done();//进度条结束
})

//任意的路由切换：实现进度条的业务 --nprogress
//路由鉴权（路由器组件访问权限设置）
//全部路由组件： 一级路由： login（登录）|404（404路由）|any（任意路由）|home（/根路由）|数据大屏（数据大屏） |acl（权限管理：三个子路由）|商品管理（4个子路由）

//未登录：可以访问login，其他的不能访问（重定向到login）
//登录后：不可以访问login，访问login（重定向到首页），其他的可以访问